package model;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import vos.ClienteVO;


//FALTA REVISAS/REHACER ANOTACIONES
@Entity
@Table(name = "CLIENTES")
public class Cliente implements Serializable{

	public Cliente(Integer id, String nombre, String apellido, Integer dni,
			String telefono, CondicionVenta condicionVenta, Double descuento,
			Double iva) {
		super();
		this.id = id;
		this.nombre = nombre;
		this.apellido = apellido;
		this.dni = dni;
		this.telefono = telefono;
		this.condicionVenta = condicionVenta;
		this.descuento = descuento;
	}

	public Cliente() {}

	private static final long serialVersionUID = 3201775291932501922L;
	
	private Integer id;
	private String nombre;
	private String apellido;
	private Integer dni;
	private String telefono;
	private CondicionVenta condicionVenta = new CondicionVenta();
	private Double descuento = 0.0;
	private Double iva = 21.0;
	
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public Integer getId() {
		return id;
	}
	@SuppressWarnings("unused") //Solo lo setea el ORM
	private void setId(Integer id) {
		this.id = id;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getApellido() {
		return apellido;
	}
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	public Integer getDni() {
		return dni;
	}
	public void setDni(Integer dni) {
		this.dni = dni;
	}
	public String getTelefono() {
		return telefono;
	}
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "id_condicion")
	public CondicionVenta getCondicionVenta() {
		return condicionVenta;
	}
	public void setCondicionVenta(CondicionVenta condicionVenta) {
		this.condicionVenta = condicionVenta;
	}
	public Double getDescuento() {
		return descuento;
	}
	public void setDescuento(Double descuento) {
		this.descuento = descuento;
	}
	
	@Transient
	public ClienteVO getVO(){
		ClienteVO clienteVO = new ClienteVO();
		clienteVO.setId(id);
		clienteVO.setApellido(apellido);
		clienteVO.setDni(dni);
		clienteVO.setNombre(nombre);
		clienteVO.setTelefono(telefono);
		clienteVO.setCondicionVentaVO(condicionVenta.getVO());
		clienteVO.setDescuento(descuento);
		clienteVO.setIva(iva);
		
		return clienteVO;
	}
	@Transient
	public void setVO(ClienteVO clienteVO){
		this.apellido = clienteVO.getApellido();
		this.dni = clienteVO.getDni();
		this.nombre = clienteVO.getNombre();
		this.telefono = clienteVO.getTelefono();
		
		CondicionVenta condicionVenta = new CondicionVenta();
		condicionVenta.setVO(clienteVO.getCondicionVentaVO());
		this.condicionVenta = condicionVenta;
		this.id = clienteVO.getId();
		this.iva = clienteVO.getIva();
		this.descuento = clienteVO.getDescuento();
		
	}
	public Double getIva() {
		return iva;
	}
	public void setIva(Double iva) {
		this.iva = iva;
	}
}
